/*
 * EventTimeResource.h
 *
 *  Created on: 2013. 9. 9.
 *      Author: mega@gamevil.com
 */

#ifndef EVENTTIMERESOURCE_H_
#define EVENTTIMERESOURCE_H_

#include <map>
#include <vector>
#include <sys/time.h>

namespace ProjectZ { namespace NResource {

class EventTimeData
{
public:
	struct Flyweight
	{
		int _TYPE;
		int _SUB_TYPE;
		time_t _START_SEC;
		time_t _END_SEC;
	};

public:
	EventTimeData() {};
	virtual ~EventTimeData();

	bool LoadResource(int company, int saleCode);
	Flyweight * GetFly(int type);

private:
	void	Clear();

public:
	typedef std::vector<Flyweight *>	DATAVECTOR;
	typedef std::map<int, DATAVECTOR>	DATATREE;

private:
	DATATREE	clsMap;
};

class EventTimeResource
{
public:
	enum EventType
	{
		EM_EVENT_TYPE_ITEM_REFINE = 2,					// 아이템 제련 이벤트
		EM_EVENT_TYPE_DAILY_ATTEND,						// 일일출석 이벤트
		EM_EVENT_TYPE_EVENT_DUNGEON_OPEN,				// 이벤트 던전
		EM_EVENT_TYPE_SOCIAL_ACTION_REWARD,				// 소셜 액션 보상 이벤트
		EM_EVENT_TYPE_ZEN_DISCOUNT,						// 젠 할인 이벤트
		EM_EVENT_TYPE_FRIEND_INVITE_MEET,				// 친구 초대 번개 이벤트
		EM_EVENT_TYPE_DUNGEON_DAILY_EVENT,				// 던전 요일별 이벤트
		EM_EVENT_TYPE_FAIRY_GACHYA,						// 페어리 뽑기 이벤트
		EM_EVENT_TYPE_BATTLEPET_GACHYA	= 10,			// 전투펫 뽑기 이벤트
		EM_EVENT_TYPE_LAUNCHING_EVENT,					// 론칭 이벤트
		EM_EVENT_TYPE_CONNECT_EVENT,					// 접속 이벤트

		EM_EVENT_TYPE_WORLDBOSS_EVENT = 13,				// 월드 보스 이벤트
		EM_EVENT_TYPE_WORLDBOSS_REWARD,					// 월드 보스 보상
		EM_EVENT_TYPE_STAMINA_EVENT,					// 이벤트 던전 스태미너 복구 시간 감소 이벤트
		EM_EVENT_TYPE_PVP_WORLD_RANKING,				// PVP 전국 랭킹 이벤트
		EM_EVENT_TYPE_MAGIG_REFINE_DESTROY,				// 마법 제련 파괴 이벤트

		EM_EVENT_TYPE_DUNGEON_REWARD_ZEN = 18,			// 던전 보상 ZEN 카드 이벤트
		EM_EVENT_TYPE_DUNGEON_REWARD_GRADE = 19,		// 던전 보상 품질 결정 확률 이벤트
		EM_EVENT_TYPE_DUNGEON_REWARD_QUALITY = 20,		// 던전 보상 등급 결정 확률 이벤트
		EM_EVENT_TYPE_DUNGEON_REWARD_REFINE = 21,		// 던전 보상 강화 단계 결정 이벤트
	};

public:
	EventTimeResource();
	virtual ~EventTimeResource();

	bool LoadResource();
	EventTimeData::Flyweight * GetFly(User * pUser, int type);

	bool		IsOpenEventDungeon(User * pUser);
	int			EventDungeonRemainMinute(User * pUser);

	bool		IsDungeonRewardZenCardEvent(User * pUser);
	bool		IsDungeonRewardItemQualityEvent(User * pUser);
	bool		IsDungeonRewardItemGradeEvent(User * pUser);
	bool		IsDungeonRewardItemRefineEvent(User * pUser);
	bool		IsItemRefineEvent(User * pUser);
	bool		IsDungeonDayEvent(User * pUser);
	bool		IsFairyGachyaEvent(User * pUser);
	bool		IsBattlePetGachyaEvent(User * pUser);
	bool		IsDailyAttendEvent(User * pUser);
	bool		IsSocialActionRewardEvent(User * pUser);
	bool		IsFriendInviteMeetEvent(User * pUser);
	bool		IsLaunchingEvent(User * pUser);
	bool		IsZENDiscountEvent(User * pUser);
	bool		IsConnectEvent(User * pUser);
	bool		IsWorldBossEvent(User * pUser);
	bool		IsWorldBossReward(User * pUser);
	bool		IsStaminaRecoveryTimeEvent(User * pUser);
	bool		IsPVPWorldRankingEvent(User * pUser);
	bool		IsMagicRefineDestroyEvent(User * pUser);

	int			WorldBossEventRemainMinute(User * pUser);

	int 		GetWorldBossEventCount();

private:
	bool		IsEvent(User * pUser, EventType eType);
	bool		IsDungeonReward(User * pUser);

private:
	EventTimeData * pEventTimeAD;
	EventTimeData * pEventTimeIOS;

	int 		_count;
};

} /* NResource */ } /* ProjectZ */

#endif /* EVENTTIMERESOURCE_H_ */
